package com.eastfair.venueservice.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.eastfair.core.base.entity.Entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;
import com.eastfair.annotation.model.EchoVO;
import com.eastfair.venueservice.enumeration.ServiceInventoryOutFlowOutStockTypeEnum;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 服务库存出库流水记录
 * </p>
 *
 * @author linan
 * @since 2022-09-23
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("vsm_service_inventory_out_flow")
@ApiModel(value = "ServiceInventoryOutFlow", description = "服务库存出库流水记录")
@AllArgsConstructor
public class ServiceInventoryOutFlow extends Entity<Long> implements EchoVO {

    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Map<String, Object> echoMap = new HashMap<>();
    /**
     * 是否启用（确认状态）：1是 已确认；0否 未确认
     */
    @ApiModelProperty(value = "是否启用（确认状态）：1是 已确认；0否 未确认")
    @TableField(value = "is_enabled")
    @Excel(name = "是否启用（确认状态）：1是 已确认；0否 未确认")
    private Integer isEnabled;

    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @TableField(value = "is_deleted")
    @Excel(name = "是否删除：1是；0否")
    private Integer isDeleted;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @TableField(value = "subsystem_id")
    @Excel(name = "子系统id")
    private Long subsystemId;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @TableField(value = "tenant_id")
    @Excel(name = "租户id")
    private Long tenantId;

    /**
     * 库存编码
     */
    @ApiModelProperty(value = "库存编码")
    @Size(max = 255, message = "库存编码长度不能超过255")
    @TableField(value = "inventory_code", condition = LIKE)
    @Excel(name = "库存编码")
    private String inventoryCode;

    /**
     * 变动前库存数量
     */
    @ApiModelProperty(value = "变动前库存数量")
    @TableField(value = "before_inventory_num")
    @Excel(name = "变动前库存数量")
    private BigDecimal beforeInventoryNum;

    /**
     * 变动后库存数量
     */
    @ApiModelProperty(value = "变动后库存数量")
    @TableField(value = "after_inventory_num")
    @Excel(name = "变动后库存数量")
    private BigDecimal afterInventoryNum;

    /**
     * 出库数量
     */
    @ApiModelProperty(value = "出库数量")
    @TableField(value = "out_num")
    @Excel(name = "出库数量")
    private BigDecimal outNum;

    /**
     * 出库类型 #{EXHIBITION:展会出库;DAILY:日常出库;DAMAGE:损坏出库;ORDER:订单出库;BORROW:借用出库}
     */
    @ApiModelProperty(value = "出库类型 #{EXHIBITION:展会出库;DAILY:日常出库;DAMAGE:损坏出库;ORDER:订单出库;BORROW:借用出库}")
    @TableField(value = "out_stock_type")
    @Excel(name = "出库类型 #{EXHIBITION:展会出库;DAILY:日常出库;DAMAGE:损坏出库;ORDER:订单出库;BORROW:借用出库}", replace = {"展会出库_EXHIBITION", "日常出库_DAILY", "损坏出库_DAMAGE", "订单出库_ORDER", "借用出库_BORROW",  "_null"})
    private ServiceInventoryOutFlowOutStockTypeEnum outStockType;

    /**
     * 展会id
     */
    @ApiModelProperty(value = "展会id")
    @TableField(value = "exhibition_manage_id")
    @Excel(name = "展会id")
    private Long exhibitionManageId;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    @Size(max = 255, message = "备注长度不能超过255")
    @TableField(value = "remark", condition = LIKE)
    @Excel(name = "备注")
    private String remark;


    @Builder
    public ServiceInventoryOutFlow(Long id, Long createdBy, LocalDateTime createTime, Long updatedBy, LocalDateTime updateTime, 
                    Integer isEnabled, Integer isDeleted, Long projectId, Long subsystemId, Long tenantId, 
                    String inventoryCode, BigDecimal beforeInventoryNum, BigDecimal afterInventoryNum, BigDecimal outNum, ServiceInventoryOutFlowOutStockTypeEnum outStockType, Long exhibitionManageId, String remark) {
        this.id = id;
        this.createdBy = createdBy;
        this.createTime = createTime;
        this.updatedBy = updatedBy;
        this.updateTime = updateTime;
        this.isEnabled = isEnabled;
        this.isDeleted = isDeleted;
        this.projectId = projectId;
        this.subsystemId = subsystemId;
        this.tenantId = tenantId;
        this.inventoryCode = inventoryCode;
        this.beforeInventoryNum = beforeInventoryNum;
        this.afterInventoryNum = afterInventoryNum;
        this.outNum = outNum;
        this.outStockType = outStockType;
        this.exhibitionManageId = exhibitionManageId;
        this.remark = remark;
    }

}
